﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CSNN
{
    /// <summary>
    /// Образ, применяемый к нейронной сети
    /// </summary>
    public class Image
    {
        /// <summary>
        /// Размерность образа
        /// </summary>
        public int InSignalsCount { get; set; }
        
        /// <summary>
        /// Массив сигналов образа
        /// </summary>
        public double[] InputSignals;
                               
        public Image()
        {
            this.InSignalsCount = 0;
            this.InputSignals = null;            
        }

        /// <summary>
        /// Установка образа
        /// </summary>
        /// <param name="InputSignals">Массив входных сигналов</param>
        public void SetImage(double[] InputSignals)
        {
            this.InSignalsCount = InputSignals.Count<double>();
            this.InputSignals = new double[this.InSignalsCount];
            InputSignals.CopyTo(this.InputSignals, 0);
        }

        /// <summary>
        /// Установка образа
        /// </summary>
        /// <param name="InputCount">Размерность образа</param>
        public void SetImage(int InputCount)
        {
            this.InSignalsCount = InputCount;
            this.InputSignals = new double[InputCount];

            for (int i = 0; i < InputCount; i++)
            {
                this.InputSignals[i] = 0;
            }
        }

        /// <summary>
        /// Получение массива входных сигналов для нейронной сети
        /// </summary>
        /// <returns></returns>
        public double GetInputSignal(int NumOfInputSignal)
        {
            return this.InputSignals[NumOfInputSignal];
        }

        /// <summary>
        /// Копирование образа
        /// </summary>
        /// <param name="ImageToWrite">Образ, в который копируется искомый</param>
        public void CopyTo(ref Image ImageToWrite)
        {
            ImageToWrite.InSignalsCount = this.InSignalsCount;
            this.InputSignals.CopyTo(ImageToWrite.InputSignals, 0);
        }

        /// <summary>
        /// Получение всех сигналов образа в виде строки
        /// </summary>        
        public override string ToString()
        {
            string s = "{";

            for (int i = 0; i < this.InSignalsCount-1; i++)
            {
                s += this.InputSignals[i].ToString() + ";";
            }

            s += this.InputSignals[this.InSignalsCount-1].ToString()+"}";
            
            return s;
        }
        

    }
}
